package eu.runelord.programmers.t523121;

import java.util.Date;

public class ZegarFactory {

	private static long numberOfInstances = 0;

	public synchronized static Zegar getDefaultZegar() {
		numberOfInstances++;
		return new Zegar() {

			private Date czas; // i tu ustalamy czas na północ

			public void move(long milis) {
				// przesuwanie czasu
			}

			@Override
			protected void finalize() throws Throwable {
				super.finalize();
				synchronized (this) {
					numberOfInstances--;
				}
			}

			@Override
			public String toString() {
				// tu wlasna implementacja wypisywania czasu
				return super.toString();
			}

		};

	}

	public synchronized static Zegar getActualZegar() {
		numberOfInstances++;
		return new Zegar() {

			private Date czas = new Date(); 

			public void move(long milis) {
				// przesuwanie czasu
			}

			@Override
			protected void finalize() throws Throwable {
				super.finalize();
				synchronized (this) {
					numberOfInstances--;
				}
			}

			@Override
			public String toString() {
				// tu wlasna implementacja wypisywania czasu
				return super.toString();
			}

		};

	}
	
	public synchronized static Zegar getZegar(final Date date) {
		numberOfInstances++;
		return new Zegar() {

			private Date czas = date; 

			public void move(long milis) {
				// przesuwanie czasu
			}

			@Override
			protected void finalize() throws Throwable {
				super.finalize();
				synchronized (this) {
					numberOfInstances--;
				}
			}

			@Override
			public String toString() {
				// tu wlasna implementacja wypisywania czasu
				return super.toString();
			}

		};

	}

	public synchronized static long getNumberOfInstances() {
		return numberOfInstances;
	}
	
}
